package tp1.models;

import java.util.Date;
import tp1.dao.ChamadaDao;

/**
 *
 * @author tulio
 */
public class Linha {

    private int diaDePagamento;

    private Date dataDeAtivacao, dataDeCancelamento;

    private String numero;

    private Cliente cliente;

    private Plano plano;

    public Linha(String numero) {
        this.numero = numero;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Date getDataDeAtivacao() {
        return dataDeAtivacao;
    }

    public void setDataDeAtivacao(Date dataDeAtivacao) {
        this.dataDeAtivacao = dataDeAtivacao;
    }

    public Date getDataDeCancelamento() {
        return dataDeCancelamento;
    }

    public void setDataDeCancelamento(Date dataDeCancelamento) throws Exception {
        if(dataDeCancelamento != null){
            if (!(this.dataDeAtivacao.getTime() < dataDeCancelamento.getTime())){
                throw new Exception("Data de ativação deve ser menor que data de cancelamento.");
            }

            Date ultChamada = ChamadaDao.findUltimaChamadaByTelefone(this.numero);
            
            if(ultChamada != null){
                System.out.println(ultChamada.toString() + " - " + dataDeCancelamento.toString());
                if (!(dataDeCancelamento.getTime() > ultChamada.getTime())){
                    throw new Exception("Data de cancelamento deve ser maior que data de fim da última chamada originada.");
                }
            }
        }
        this.dataDeCancelamento = dataDeCancelamento;
    }

    public int getDiaDePagamento() {
        return diaDePagamento;
    }

    public void setDiaDePagamento(int diaDePagamento) throws Exception {
        if((diaDePagamento == 1) || (diaDePagamento == 5) || (diaDePagamento == 10) || (diaDePagamento == 15)){
            this.diaDePagamento = diaDePagamento;
        } else {
            throw new Exception("A data de vencimento deve ser no dia 1, 5, 10 ou 15.");
        }
    }

    public String getNumero() {
        return numero;
    }

    public Plano getPlano() {
        return plano;
    }

    public void setPlano(Plano plano) {
        this.plano = plano;
    }

    @Override
    public String toString() {
        return "Linha{\n\t" + "diaDePagamento=" + diaDePagamento + "\n\tdataDeAtivacao=" + dataDeAtivacao + "\n\tdataDeCancelamento=" + dataDeCancelamento + "\n\tnumero=" + numero + "\n\tcliente=" + cliente.toString() + "\n\tplano=" + plano.toString() + "\n}";
    }    

}